package org.example.concurrent.vol;

public class Counter3 {

     // volatile不能保证原子性在，read load之后，如果主内存count变量发生
     // 修改之后，线程工作内存中的值由于已经加载，不会产生对应的变化，
     // 所以计算出来的结果会和预期不一样
     public static int count = 0 ;
 
     public static synchronized void inc() {
 
         //这里延迟1毫秒，使得结果明显
         try {
             Thread.sleep( 1 );
         } catch (InterruptedException e) {
         }
         count++;
     }
 
     public static void main(String[] args) throws InterruptedException {
 
         //同时启动1000个线程，去进行i++计算，看看实际结果
 
         for ( int i = 0 ; i < 1000 ; i++) {
             new Thread( new Runnable() {
                 @Override
                 public void run() {
                     Counter3.inc();
                 }
             }).start();
         }
 
         //这里每次运行的值都有可能不同,可能为1000
         Thread.sleep(3000);

         System.out.println( "运行结果:org.example.concurrent.vol.Counter.count=" + Counter3.count);
     }
}